#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <functional>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
    string str = "123456789";
    int a = stoi(str.c_str()); // stoi的字符串必须是字符串123456这种数子字符串
    // int a = atoi(str.c_str());
    int b = atoi(str.c_str());
    int c = 0;
    istringstream ifs(str); // istringstream要先绑定
    ifs >> c;
    cout << " a,b,c : " << a << " " << b << " " << c << endl;

    int num = 1234;
    int sum = 56789;
    string s1 = to_string(num);
    s1 += to_string(sum);
    ostringstream ofs;
    ofs << num << sum;
    string s2 = ofs.str(); //ostringstream要先提取
    cout << "s1,s2 : " << s1 << " " << s2 << endl;
    return 0;
}
// struct ServerInfo
// {
//     char _address[32];
//     // string _address;//注意这里不能用string，进程会异常退出，会崩溃
//     int _port;
// };

// struct ConfigManager
// {
// public:
//     ConfigManager(const char *filename)
//         : _filename(filename)
//     {
//     }
//     void WriteBin(ServerInfo &info) // 写到文件里面，用的是ofstream
//     {
//         ofstream ofs(_filename, ios_base::out | ofstream::binary);
//         char *p = reinterpret_cast<char *>(&info);
//         ofs.write(p, sizeof(info));
//     }
//     void ReadBin(ServerInfo &info) // 读取文件的内容，用ifstream
//     {
//         ifstream ifs(_filename, ios_base::in | ofstream::binary);
//         char *p = reinterpret_cast<char *>(&info);
//         ifs.read(p, sizeof(info));
//     }

// private:
//     string _filename; // 配置文件
// };

// int main()
// {
//     ConfigManager cm("test.txt");
//     ServerInfo winfo = {"192.0.0.111111111111111111", 80};
//     cm.WriteBin(winfo);

//     ServerInfo rinfo;
//     cm.ReadBin(rinfo);

//     cout << rinfo._address << endl;
//     cout << rinfo._port << endl;

//     return 0;
// }

// class Date
// {
//     friend ostream &operator<<(ostream &out, const Date &d);
//     friend istream &operator>>(istream &in, Date &d);

// public:
//     Date(int year = 1, int month = 1, int day = 1)
//         : _year(year), _month(month), _day(day)
//     {
//     }
//     operator bool()
//     {
//         // 这里是随意写的，假设输入_year为0，则结束
//         if (_year == 0)
//             return false;
//         else
//             return true;
//     }

// private:
//     int _year;
//     int _month;
//     int _day;
// };
// ostream &operator<<(ostream &out, const Date &d)
// {
//     out << d._year << "---" << d._month << "---" << d._day;
//     return out;
// }
// istream &operator>>(istream &in, Date &d)
// {
//     in >> d._year >> d._month >> d._day;
//     return in;
// }
// // C++ IO流，使用面向对象+运算符重载的方式
// // 能更好的兼容自定义类型，流插入和流提取
// int main()
// {
//     // 自动识别类型的本质--函数重载
//     // 内置类型可以直接使用--因为库里面ostream类型已经实现了
//     int i = 1;
//     double j = 2.2;
//     cout << i << endl;
//     cout << j << endl;
//     // 自定义类型则需要我们自己重载<< 和 >>
//     Date d(2022, 4, 10);
//     cout << d;
//     while (d)
//     {
//         cin >> d;
//         cout << d;
//     }
//     return 0;
// }

// class A
// {
// public:
// 	A(int a)//使得 ------   内置类型隐式类型转换成自定义类型
// 		:_a1(1)
// 		,_a2(2)
// 	{}
// 	operator int()//使得  ----  自定义类型隐式类型转换成内置类型
// 	{
// 		return _a1 + _a2;
// 	}
// 	operator double()
// 	{
// 		return (_a1 + _a2) * 0.1;
// 	}
// private:
// 	int _a1;
// 	int _a2;
// };
// int main()
// {
// 	// 内置类型隐式类型转换成自定义类型
// 	A aa1 = 5;

// 	// 自定义类型隐式类型转换成内置类型
// 	int a = aa1;
// 	cout << a << endl;
// 	double b = aa1;
// 	cout << b << endl;

// 	//string str;
// 	//while (cin >> str)
// 	//{
// 	//	cout << str << endl;
// 	//}
// 	return 0;
// }
